import 'package:flutter01/pages/sqfLite/utils/object_util.dart';
import 'package:sqflite/sqflite.dart';

/// 用来 管理数据库的类
class SqlManager {
  /// 数据库版本
  static const _VERSION = 1;

  ///  数据库命名
  static const _DB_NAME = "root.db";

  /// 数据库对象
  static Database? _database;

  /// 初始化数据库对象
  static Future<void> init() async {
    // 生成数据库在本地存储中的存储位置
    String dbPath = await getDatabasesPath() + "/$_DB_NAME";
    _database = await openDatabase(dbPath,version:_VERSION,onCreate:(db,version){});
  }

  /// 获取当前数据库对象，第一次获取没有则创建
  static Future<Database> getCurrentDataBase() async {
    if(_database == null){
      await init();
    }
    return _database!;
  }

  /// 判断表是否存在
  static Future<bool> isTableExists(String tableName) async {
    await getCurrentDataBase();
    var result = await _database?.rawQuery(
        "select * from Sqlite_master where type = 'table' and name = '$tableName'");
    return !ObjectUtil.isEmptyList(result);
  }

  /// 关闭数据库
  static void close(){
    _database?.close();
    _database = null;
  }

  // 下面内容 定义的增删改查方法需根据使用情况修改代码

  /// 插入数据
  static Future<int> insertData(String tableName , Map<String, dynamic> value) async {
    // 因为原数据里面有id参数，先移除掉
    // value.remove("id");
    return await _database!.insert(tableName, value);
  }

  /// 查询数据
  static Future<List<Map<String, dynamic>>> queryData(String tableName) async {
    return await _database!.query(tableName);
  }

  /// 删除一条数据
  static Future<int> deleteData(String tableName , int id) async {
    if (id == null || id == 0) {
      return 0;
    }
    return await _database!.delete(tableName, where: "id = ?", whereArgs: [id]);
  }

  /// 更新数据
  static Future<int> updateData(String tableName , Map<String, dynamic> value, int id) async {
    return await _database!.update(
      tableName,
      value,
      where: "id = ?",
      whereArgs: [id],
    );
  }
}